import axios from 'axios'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// axios.create()返回值
//  简单理解就是Axios实例，就是axios对象
// request就是axios

const request = axios.create({
  //配置对象
  //将来使用request发送请求，会默认添加的内容
  /* 
    基础路径

      将来使用request发送请求 request({url:'/xxx'})
      实际发送请求时，地址由： baseURL + url 组成
      实际请求地址：/api/xxx
  */
  baseURL: '/mock', //复用请求地址前缀
  timeout: 10000 //请求超时时间
  //   headers:{
  // 公共请求头
  //   }
})

/* 
  使用request发送请求，发送请求的流程：
  1.请求拦截器设置的回调函数
     得到参数：发送请求的配置对象
     返回数据：发送请求的配置对象
  2.request内部会发送请求（此时服务器就会接受到请求）
      得到参数：发送请求的配置对象
      返回数据：服务器响应的结果
  3.响应拦截器设置的回调函数
       得到参数：服务器响应的结果
       返回数据：
  4.async await后面代码
*/

// 请求拦截器
request.interceptors.request.use(
  // 成功
  (config) => {
    // 开始进度条
    NProgress.start()
    // （设置）复用公共请求参数
    // config 就是请求的配置对象
    return config
  }
  // 失败
  // () => {}
)

// 响应拦截器
request.interceptors.response.use(
  // 看响应状态码 2xx成功 非2xx失败
  // 请求成功 - 成功
  (response) => {
    // 结束进度条
    NProgress.done()
    // response就是服务器的响应结果
    if (response.data.code === 200) {
      return response.data.data
    } else {
      // 功能失败
      alert(response.data.message)
      return Promise.reject(response.data.message)
    }
  },
  // 请求失败 - 失败
  (error) => {
    // 结束进度条
    NProgress.done()
    alert(error)
    return Promise.reject(error)
  }
)

export default request
